#pragma once

#include "type.h"
#include "vector4.h"

namespace RenderSystem
{

	/**
	* The types of interactions between a light and a primitive.
	*/
	enum ELightMapInteractionType
	{
		LMIT_None,
		LMIT_Vertex,
		LMIT_Texture,
	};

	/** The number of coefficients that are stored for each light sample. */ 
	static const INT NUM_STORED_LIGHTMAP_COEF = 3;

	/** The number of directional coefficients which the lightmap stores for each light sample. */ 
	static const INT NUM_DIRECTIONAL_LIGHTMAP_COEF = 2;

	/** The number of simple coefficients which the lightmap stores for each light sample. */ 
	static const INT NUM_SIMPLE_LIGHTMAP_COEF = 1;

	/** The index at which simple coefficients are stored in any array containing all NUM_STORED_LIGHTMAP_COEF coefficients. */ 
	static const INT SIMPLE_LIGHTMAP_COEF_INDEX = 2;


	/**
	* The light incident for a point on a surface in three directions, stored as bytes representing values from 0-1.
	*
	* @warning BulkSerialize: FQuantizedDirectionalLightSample is serialized as memory dump
	* See TArray::BulkSerialize for detailed description of implied limitations.
	*/
	struct QuantizedDirectionalLightSample
	{
		/** The lighting coefficients, colored. */
		Common::Vector4	vCoefficients[NUM_DIRECTIONAL_LIGHTMAP_COEF];
	};

	/**
	* The light incident for a point on a surface along the surface normal, stored as bytes representing values from 0-1.
	*
	* @warning BulkSerialize: FQuantizedSimpleLightSample is serialized as memory dump
	* See TArray::BulkSerialize for detailed description of implied limitations.
	*/
	struct QuantizedSimpleLightSample
	{
		/** The lighting coefficients, colored. */
		Common::Vector4	vCoefficients[NUM_SIMPLE_LIGHTMAP_COEF];
	};



	class LightMap
	{
	public:
		LightMap(void);
		~LightMap(void);
	};

}